\documentclass[12pt]{article}

\usepackage{longtable}
\usepackage{hyperref}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}
\usepackage{fancyvrb }
\pagestyle{empty}
%\setcounter{secnumdepth}{2}

\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{3}

\topmargin=0cm
\oddsidemargin=0cm
\textheight=22.0cm
\textwidth=16cm
\parindent=0cm
\parskip=0.15cm
\topskip=0truecm
\raggedbottom
\abovedisplayskip=3mm
\belowdisplayskip=3mm
\abovedisplayshortskip=0mm
\belowdisplayshortskip=2mm
\normalbaselineskip=12pt
\normalbaselines

\begin{document}

\vspace*{0.5in}
\centerline{\bf\Large Test Document}

\vspace*{0.5in}
\centerline{\bf\Large Team 3}

\vspace*{0.5in}
\centerline{\bf\Large 26 March 2012}
%====================================================
% STUDENT NAMES TABLE
%====================================================
%
\vspace*{1.5in}
\begin{table}[htbp]
\caption{Team}
\begin{center}
\begin{tabular}{|l | c|}
\hline
\multicolumn{1}{|c|}{Name} & \multicolumn{1}{|c|}{ID Number} \\
\hline\hline
Rolf Schmidt & 9538267 \\
Amer Alhalabi & 9067272 \\
Zoardar Golam & 1114441 \\
Rajwinder Kaur & 6282490 \\
Dmitriy Fingerman & 6436579 \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
\tableofcontents
%\clearpage
%\listoffigures
\clearpage
\listoftables

\newcounter{test_case_counter}
\setcounter{test_case_counter}{1}

%====================================================
% INTRODUCTION
%====================================================

\clearpage

\section{Introduction}

This document describes the test plan for the TMS including all test cases at different levels (system, subsystem and unit tests). It describes briefly the schedule and resources for testing, how the test cases were designed, which qualities were tested and which qualities were not tested.

The descriptions of the system level test cases state the purpose and context for the test, input test data and expected output. Subsystem and unit tests are listed 

\section{Test Plan}

At the class level, the Task, Person and DependencyManager classes are tested individually. The data handler subsystem contains the TaskTree, PeopleList and Project classes. The TaskTree class is associated with the Task class, the PeopleList class with the Person class. The Project class is an aggregation of the TaskTree, PeopleList and DependencyManager classes.

At the subsystem and system level, the tests will check if the functionality provided by one constituent class works properly without affecting another constituent class.

The event handler subsystem will not be tested as the code for it is auto-generated by the IDE and assumed to work properly.

The last subsystem to test is the user interface. However, data binding between the underlying model (\textit{i.e.} the data handler subsystem) and the user interface elements is used to reflect the changes to the model in the user interface automatically. The code for this is also auto-generated by the IDE and therefore not tested (see above).

Testing is carried out concurrently with coding or shortly after a class has been implemented. Test cases are either written by the original developer or an independent tester.

The scope of the TMS is very limited and hence it is possible to design the test cases bottom-up and and integrate all design classes in a big bang approach. After every code modification, all tests are run and failing tests are looked at carefully. The code is fixed until all test cases pass.

While non-functional requirements are not tested at all, the functional requirements of the TMS are tested exhaustively using feature testing at the system level.

%=============================================
% SYSTEM TEST CASES
%=============================================
%
\clearpage

\subsection{System Level Test Cases}

%=============================================
% TEST CASE: Loading empty project file when system is empty
%=============================================

\subsubsection{Loading empty project file when system is empty} \label{st_tc:1}

\noindent
{\bf Purpose}\\
To verify that the system is able to load an empty project file correctly when the system itself is empty.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F1: Loading Project Data & Input data is loaded correctly\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is empty\\
Input test data: File listed in section A.1: Empty project file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Open Project File' icon & N/A\\
\hline
Select file & File listed in section A.1: Empty project file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
All views & No data\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Loading empty project file when system is not empty
%=============================================

\subsubsection{Loading empty project file when system is not empty} \label{st_tc:2}

\noindent
{\bf Purpose}\\
To verify that the system is able to load an empty project file correctly when the system itself is not empty.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F1: Loading Project Data & Input data is loaded correctly; \\ & Previous system state doesn't affect new data loading\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: File listed in section A.1: Empty project file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Open Project File' icon & N/A\\
\hline
Select file & File listed in section A.2: Non-empty project file 1\\
\hline
Click 'Open Project File' icon & N/A\\
\hline
Select file & File listed in section A.1: Empty project file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
All views & No data\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Loading non-empty project file when system is empty
%=============================================

\subsubsection{Loading non-empty project file when system is empty} \label{st_tc:3}

\noindent
{\bf Purpose}\\
To verify that the system is able to load a non empty project file correctly when the system itself is empty.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F1: Loading Project Data & Input data is loaded correctly\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is empty\\
Input test data: File listed in section A.2: Non-empty project file 1.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Open Project File' icon & N/A\\
\hline
Select file & File listed in section A.2: Non-empty project file 1\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Tree & 6 tasks: \\ & Task 1 (no subtasks); \\ & Task 2 with 2 subtasks: Task 21 and Task 22; \\ & Task 22 with subtask 221; \\ & Task 3 (no subtasks);\\
\hline
Task Table & Displaying 6 tasks\\
\hline
Task Table: row Task 1 & Title: Task 1 \\ & Description: Description 1 \\ & Duration: 10 \\ & Deadline: 2012/03/20 \\ & Deliverable: Deliverable 1 \\ & Before ID: 1 \\ & Person: Person 1\\
\hline
Task Table: row Task 2 & Title: Task 2 \\ & Description: Description 2 \\ & Duration: 5 \\ & Deadline: 2012/03/27 \\ & Deliverable: Deliverable 2 \\ & Before ID: -1 \\ & Person: Person 2\\
\hline
Task Table: row Task 21 & Title: Task 21 \\ & Description: Description 21 \\ & Duration: 2 \\ & Deadline: 2012/03/27 \\ & Deliverable: Deliverable 21 \\ & Before ID: -1 \\ & Person: Person 2\\
\hline
Task Table: row Task 22 & Title: Task 22 \\ & Description: Description 22 \\ & Duration: 2 \\ & Deadline: 2012/03/27 \\ & Deliverable: Deliverable 22 \\ & Before ID: -1 \\ & Person: Person 2\\
\hline
Task Table: row Task 221 & Title: Task 221 \\ & Description: Description 221 \\ & Duration: 2 \\ & Deadline: 2012/03/27 \\ & Deliverable: Deliverable 221 \\ & Before ID: -1 \\ & Person: Person 2\\
\hline
\end{tabular}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: row Task 3 & Title: Task 3 \\ & Description: Description 3 \\ & Duration: 10 \\ & Deadline: 2012/03/29 \\ & Deliverable: Deliverable 3 \\ & Before ID: -1 \\ & Person: Person 3\\
\hline
People Table & Displaying 3 persons\\
\hline
People Table: row Person 1 & Name: Person 1 \\ & Hours: 80 \\ & Tasks: 0\\
\hline
People Table: row Person 2 & Name: Person 2 \\ & Hours: 40 \\ & Tasks: 1, 10, 11, 111\\
\hline
People Table: row Person 3 & Name: Person 3 \\ & Hours: 80 \\ & Tasks: 2\\
\hline
Gantt Chart & Displaying 3 tasks; \\ & Deadlines and durations match those listed in Task Table; \\ & Task 2 depends on Task 1\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Loading non-empty project file when system is not empty
%=============================================

\subsubsection{Loading non-empty project file when system is not empty} \label{st_tc:4}

\noindent
{\bf Purpose}\\
To verify that the system is able to load a non empty project file correctly when the system itself is not empty.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F1: Loading Project Data & Input data is loaded correctly; \\ & Previous system state doesn't affect new data loading\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.3: Non-empty project file 2.\\
Input test data: File listed in section A.2: Non-empty project file 1.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Open Project File' icon & N/A\\
\hline
Select file & File listed in section A.3: Non-empty project file 2\\
\hline
Click 'Open Project File' icon & N/A\\
\hline
Select file & File listed in section A.2: Non-empty project file 1\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Same as in Test Case 3\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
All views & Same as in previous test case\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Loading invalid project file
%=============================================

\subsubsection{Loading invalid project file} \label{st_tc:5}

\noindent
{\bf Purpose}\\
To verify system's robustness in handling invalid input\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F1: Loading Project Data & Invalid input doesn't cause system failure\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.3: Non-empty project file 2.\\
Input test data: File listed in section A.4: Invalid project file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.3: Non-empty project file 2\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.4: Invalid project file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
All views & Same as before use case\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Saving empty project
%=============================================

\subsubsection{Saving empty project} \label{st_tc:6}

\noindent
{\bf Purpose}\\
To verify that the system is able to save an empty project successfully\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F8: Saving Project Data & Project data is saved correctly\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is empty\\
Input test data: No input test data.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Save Project File' icon & N/A\\
\hline
Select file & The selected output file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Output file & File listed in section A.1: Empty project file\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 8: Saving Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Saving non-empty project
%=============================================

\subsubsection{Saving non-empty project} \label{st_tc:7}

\noindent
{\bf Purpose}\\
To verify that the system is able to save a non-empty project successfully\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F8: Saving Project Data & Project data is saved correctly\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test data.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2: Non-empty project file 1\\
\hline
Click 'Save Project File' icon & N/A\\
\hline
Select file & The selected output file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Output file & File listed in section A.2: Non-empty project file 1.\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 8: Saving Project Data & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Exporting tasks when no tasks are present
%=============================================

\subsubsection{Exporting tasks when no tasks are present} \label{st_tc:8}

\noindent
{\bf Purpose}\\
To verify that the system is able to export tasks correctly to a csv file when no tasks are present in the system\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F6: Exporting Tasks & Correctness of the csv output file\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.1: Empty project file\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.1: Empty project file\\
\hline
Click 'Export tasks to a csv file' icon & N/A\\
\hline
Select file & The selected output file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Output file & File listed in section B.1: Empty tasks export file\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 6: Exporting Tasks & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Exporting tasks when tasks are present in the system
%=============================================

\subsubsection{Exporting tasks when tasks are present in the system} \label{st_tc:9}

\noindent
{\bf Purpose}\\
To verify that the system is able to export tasks correctly to a csv file when there are tasks present in the system\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F6: Exporting Tasks & Correctness of the csv output file\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2: Non-empty project file 1\\
\hline
Click 'Export tasks to a csv file' icon & N/A\\
\hline
Select file & The selected output file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Output file & File listed in section B.2: Non-empty tasks export file 1\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 6: Exporting Tasks & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Exporting people information when no tasks are present
%=============================================

\subsubsection{Exporting people information when no tasks are present} \label{st_tc:10}

\noindent
{\bf Purpose}\\
To verify that the system is able to export people correctly to a csv file when no tasks are present in the system\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F7: Exporting People & Correctness of the csv output file\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.1: Empty project file\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.1: Empty project file\\
\hline
Click 'Export people info to a csv file' icon & N/A\\
\hline
Select file & The selected output file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Output file & File listed in section B.3: Empty people export file\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 7: Exporting People & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Exporting people information when tasks are present in the system
%=============================================

\subsubsection{Exporting people information when tasks are present in the system} \label{st_tc:11}

\noindent
{\bf Purpose}\\
To verify that the system is able to export people correctly to a csv file when there are tasks present in the system\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F7: Exporting People & Correctness of the csv output file\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Click 'Export people info to a csv file' icon & N/A\\
\hline
Select file & The selected output file\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Output file & File listed in section B.3: Non-empty people export file 1\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 7: Exporting People & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Adding a task when the system is empty
%=============================================

\subsubsection{Adding a task when the system is empty} \label{st_tc:12}

\noindent
{\bf Purpose}\\
To verify that when the system is empty, a new task can be added to the system.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F3: Adding Task & Ability to create a first task in the system\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is empty.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Add a new task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Tree & 1 task named 'none'\\
\hline
Task Table & Displaying 1 task\\
\hline
Task Table: 1st row & Title: none \\ & Description: none \\ & Duration: 1 \\ & Deadline: system date in format YYYY/MM/DD \\ & Deliverable: none \\ & Before ID: -1 \\ & Person: nobody\\
\hline
People Table & Displaying 1 person\\
\hline
People Table: 1st row & Name: nobody \\ & Hours: 8 \\ & Tasks: 0\\
\hline
Gantt Chart & Displaying 1 task; \\ & Deadlines and durations match those listed in Task Table\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 3: Add Task & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Adding a task when the system is not empty
%=============================================

\subsubsection{Adding a task when the system is not empty} \label{st_tc:13}

\noindent
{\bf Purpose}\\
To verify that when the system is not empty, a new task can be added to the system.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F3: Adding Task & Ability to add another task to the system\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Click 'Add a new task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Tree & A new task 'none' has \\ & been added under the root node\\
\hline
Task Table & A new task has been \\ & added at the bottom of the table\\
\hline
Task Table: new row & ID: 3 \\ & Title: none \\ & Description: none \\ & Duration: 1 \\ & Deadline: system date in format YYYY/MM/DD \\ & Deliverable: none \\ & Before ID: -1 \\ & Person: nobody\\
\hline
People Table & A new person 'nobody' has been added\\
\hline
People Table: new row & Name: nobody \\ & Hours: 8 \\ & Tasks: 3\\
\hline
People Table & A new task 'none' has been added\\
\hline
Gantt Chart & new task \\ & Deadlines and durations match those listed in Task Table\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 3: Add Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Adding a subtask when the system is empty
%=============================================

\subsubsection{Adding a subtask when the system is empty} \label{st_tc:14}

\noindent
{\bf Purpose}\\
To verify that when the system is not empty, a new subtask cannot be added to the system.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F3: Adding Task & Subtask can be added only under existing subtask or task.\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is empty.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Add a subtask to the currently selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
All views & No change\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 3: Add Task & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Adding a subtask under a selected task
%=============================================

\subsubsection{Adding a subtask under a selected task} \label{st_tc:15}

\noindent
{\bf Purpose}\\
To verify that when the system is not empty, a new subtask can be added under the selected task.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F3: Adding Task & Subtask can be added under a task. \\ & Subtasks are assigned to the same person who owns the task\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Select task 'Task 1' in the Tree View & N/A\\
\hline
Click 'Add a subtask to the currently selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Tree & A new subtask 'none' has \\ & been added under the Task 1\\
\hline
Task Table & A new subtask has been \\ & added under Task 1 row\\
\hline
Task Table: new row & ID: 3 \\ & Title: none \\ & Description: none \\ & Duration: 1 \\ & Deadline: system date in format YYYY/MM/DD \\ & Deliverable: none \\ & Before ID: -1 \\ & Person: Person 1\\
\hline
People Table: row Person 1 & Task 3 has been added \\ & to the list of assigned tasks\\
\hline
Gantt Chart & Has remained unchanged\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 3: Add Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Adding a subtask under a selected subtask
%=============================================

\subsubsection{Adding a subtask under a selected subtask} \label{st_tc:16}

\noindent
{\bf Purpose}\\
To verify that when the system is not empty, a new subtask can be added under the selected subtask.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F3: Adding Task & Subtask can be added under a subtask.\\ & Subtasks are assigned to the same person who owns the task\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Select subtask 'Task 221' in the Tree View & N/A\\
\hline
Click 'Add a subtask to the currently selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Tree & A new subtask 'none' has \\ & been added under the subtask 'Task 221'\\
\hline
Task Table & A new subtask has been \\ & added under Task 221 row\\
\hline
Task Table: new row & ID: 3 \\ & Title: none \\ & Description: none \\ & Duration: 1 \\ & Deadline: system date in format YYYY/MM/DD \\ & Deliverable: none \\ & Before ID: -1 \\ & Person: Person 2\\
\hline
People Table: row Person 2 & Task 3 has been added \\ & to the list of assigned tasks\\
\hline
Gantt Chart & Has remained unchanged\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 3: Add Task & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Adding a subtask when no task or subtask is selected
%=============================================

\subsubsection{Adding a subtask when no task or subtask is selected} \label{st_tc:17}

\noindent
{\bf Purpose}\\
To verify that when no task or subtask is selected, a new subtask cannot be added.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F3: Adding Task & Subtask can be added under a selected task or subtask\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2: \\ & Non-empty project file 1\\
\hline
Click 'Add a subtask to the currently selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
All views & Have remained unchanged\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 3: Add Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Deleting a selected task which has subtasks
%=============================================

\subsubsection{Deleting a selected task which has subtasks} \label{st_tc:18}

\noindent
{\bf Purpose}\\
To verify that a selected task which has subtasks can be deleted.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F4: Deleting Task & A selected task can be deleted\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Select task 'Task 2' in the Tree View & N/A\\
\hline
Click 'Remove the selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Tree View & Task 2 and all its subtasks have been removed\\
\hline
Task Table & Task 2 and all its subtasks have been removed\\
\hline
People Table & Person 2 has been removed\\
\hline
Gantt Chart & Task 2 has been removed \\ & Task 1 has no more 'before' relations\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 4: Delete Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Deleting a selected task which has no subtasks
%=============================================

\subsubsection{Deleting a selected task which has no subtasks} \label{st_tc:19}

\noindent
{\bf Purpose}\\
To verify that a selected task which has no subtasks can be deleted.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F4: Deleting Task & A selected task can be deleted\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Select task 'Task 3' in the Tree View & N/A\\
\hline
Click 'Remove the selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Tree View & Task 3 has been removed\\
\hline
Task Table & Task 3 has been removed\\
\hline
People Table & Person 3 has been removed\\
\hline
Gantt Chart & Task 3 has been removed\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 4: Delete Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Deleting a selected subtask which has subtasks
%=============================================

\subsubsection{Deleting a selected subtask which has subtasks} \label{st_tc:20}

\noindent
{\bf Purpose}\\
To verify that a selected subtask which has subtasks can be deleted.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F4: Deleting Task & A selected subtask can be deleted\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Select task 'Task 22' in the Tree View & N/A\\
\hline
Click 'Remove the selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Tree View & Task 22 and its subtask 221 have been removed\\
\hline
Task Table & Task 22 and its subtask 221 have been removed\\
\hline
People Table & Person 2 is no longer assigned to tasks 11 and 111 \\
\hline
Gantt Chart & Has remained unchanged\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 4: Delete Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Deleting a selected subtask which has no subtasks
%=============================================

\subsubsection{Deleting a selected subtask which has no subtasks} \label{st_tc:21}

\noindent
{\bf Purpose}\\
To verify that a selected subtask which has no subtasks can be deleted.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F4: Deleting Task & A selected subtask can be deleted\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Select task 'Task 21' in the Tree View & N/A\\
\hline
Click 'Remove the selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Tree View & Task 21 has been removed\\
\hline
Task Table & Task 21 has been removed\\
\hline
People Table & Person 2 is no longer assigned to task 10\\
\hline
Gantt Chart & Has remained unchanged\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 4: Delete Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Deleting when no task is selected
%=============================================

\subsubsection{Deleting when no task is selected} \label{st_tc:22}

\noindent
{\bf Purpose}\\
To verify that pressing the 'Remove the selected task' icon when no task is selected will not delete any tasks.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F4: Deleting Task & If no task is selected, deletion \\ & will not make any changes in the system.\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Click 'Remove the selected task' icon & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
All views & Have remained unchanged\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 4: Delete Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying ID of a task
%=============================================

\subsubsection{Modifying ID of a task} \label{st_tc:23}

\noindent
{\bf Purpose}\\
To verify that ID of a task cannot be modified via the Task Table.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Task ID cannot be modified\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: task 'Task 1': try clicking ID & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: ID field & Doesn't allow editing\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying ID of a subtask
%=============================================

\subsubsection{Modifying ID of a subtask} \label{st_tc:24}

\noindent
{\bf Purpose}\\
To verify that ID of a subtask cannot be modified via the Task Table.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Task ID cannot be modified\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: subtask 'Task 21': try clicking ID & N/A\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: ID field & Doesn't allow editing\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying Title of a task
%=============================================

\subsubsection{Modifying title of a task} \label{st_tc:25}

\noindent
{\bf Purpose}\\
To verify that a title of a task can be modified via the Task Table.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Title of a task can be modified via the Task Table \\ & Tree View and Gantt Chart display modified \\ & title of the task\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: task 'Task 1': click title field & N/A\\
\hline
Insert new title & 'Task 1 new'\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: Task 1: title & Task 1 new\\
\hline
Tree View: Task 1 & Task 1 new\\
\hline
Gantt Chart: Task 1 & Task 1 new\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying Title of a subtask
%=============================================

\subsubsection{Modifying title of a subtask} \label{st_tc:26}

\noindent
{\bf Purpose}\\
To verify that a title of a subtask can be modified via the Task Table.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Title of a subtask can be modified via the Task Table \\ & Tree View displays modified title of the subtask\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: subtask 'Task 221': click title field & N/A\\
\hline
Insert new title & 'Task 221 new'\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: Task 221: title & Task 221 new\\
\hline
Tree View: Task 221 & Task 221 new\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying Description of a task
%=============================================

\subsubsection{Modifying description of a task} \label{st_tc:27}

\noindent
{\bf Purpose}\\
To verify that a description of a task can be modified via the Task Table.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Description of a task can be modified via the Task Table\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: task 'Task 1': click description field & N/A\\
\hline
Insert new description & 'Description 1 new'\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: Task 1: description & Description 1 new\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying Description of a subtask
%=============================================

\subsubsection{Modifying description of a subtask} \label{st_tc:28}

\noindent
{\bf Purpose}\\
To verify that a description of a subtask can be modified via the Task Table.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Description of a subtask can be modified via the Task Table\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: task Task 221: click description field & N/A\\
\hline
Insert new description & 'Description 221 new'\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: Task 221: description & Description 221 new\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying Duration of a task to higher than before
%=============================================

\subsubsection{Modifying duration of a task to higher than before} \label{st_tc:29}

\noindent
{\bf Purpose}\\
To verify that when duration of a task is increased via the Task Table, the People Table and Gantt Chart are updated accordingly.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Duration of a task can be increased via the Task Table \\ & Hours in People Table will become new duration * 8 \\ & Task's display in Gantt Chart will adjust per new duration\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: task 2: click duration field & N/A\\
\hline
Insert new duration & 6\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: Task 2: duration & 6\\
\hline
People Table: Person 2: Hours & 48\\
\hline
Gantt View: Task 2 & Duration increased on the graph\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying duration of a subtask to a lower one than parent subtask
%=============================================

\subsubsection{Modifying duration of a subtask to a lower one than parent subtask} \label{st_tc:30}

\noindent
{\bf Purpose}\\
To verify that when a duration of a subtask whose parent is a subtask changes to value smaller than the duration of the parent subtask, only the subtask duration changes.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Duration of a subtask is bigger or equal to the duration of the \\ & longest child subtask\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: task 221: click duration field & N/A\\
\hline
Insert new duration & 1\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: Task 221: duration & 1\\
\hline
Other Views & Unchanged\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% TEST CASE: Modifying duration of a subtask to a higher one than parent subtask and task
%=============================================

\subsubsection{Modifying duration of a subtask to a higher one than parent subtask and task} \label{st_tc:31}

\noindent
{\bf Purpose}\\
To verify that when a duration of a subtask whose parent is a subtask changes to value bigger than the duration of its parent subtask and task, the durations of the parent subtask and of the parent task change accordingly.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Requirement Tested} & \textbf{Aspect of the Requirement}\\
\hline
F5: Modifying Task & Duration of a subtask is bigger or equal to the duration of the \\ & longest child subtask\\
\hline
\end{tabular}\\

\noindent
{\bf Input Specification}\\
Test Context: System is loaded with input file listed in section A.2: Non-empty project file 1.\\
Input test data: No input test file.\\

\begin{tabular}{| l | l | }
\hline
\textbf{Operation Invoked} & \textbf{Data for operation}\\
\hline
Click 'Load Project File' icon & N/A\\
\hline
Select file & File listed in section A.2:\\ &  Non-empty project file 1\\
\hline
Task Table: task 221: click duration field & N/A\\
\hline
Insert new duration & 10\\
\hline
\end{tabular}\\

\noindent
{\bf Expected Output}\\
Expected system response: positive\\

\begin{tabular}{| l | l | }
\hline
\textbf{Output} & \textbf{Expected Value}\\
\hline
Task Table: Task 221: duration & 10 (modified directly)\\
\hline
Task Table: Task 22: duration & 10 (parent subtask)\\
\hline
Task Table: Task 2: duration & 12 (parent task: \\ & duration became sum of durations \\ & of immediate subtasks)\\
\hline
People Table: Person 2: Hours & 96 (=12*8)\\
\hline
Gantt View: Task 2 & Duration increased on the graph\\
\hline
\end{tabular}\\

\noindent
{\bf Traces to Use Cases}\\

\begin{tabular}{| l | l | }
\hline
\textbf{Use Case} & \textbf{Scenario}\\
\hline
UC 5: Modify Task & Main scenario\\
\hline
UC 1: Load Project Data & Main scenario\\
\hline
\end{tabular}\\

%=============================================
% SUBSYSTEM TEST CASES
%=============================================
%
\subsection{Subsystem Level Test Cases}

%=============================================
% DATA HANDLER SUBSYSTEM
%=============================================
%
\subsubsection{Data handler subsystem}

\paragraph{DependencyManager}
\noindent

%=============================================
% TEST CASE: AddDependency
%=============================================

\textbf{\textit{AddDependency}}\\
{\bf Purpose}\\
Add a dependency\\
{\bf Expected outcome}\\
Dependency is added correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for AddDependency} \label{tab:tc_dependencyManager_AddDependency} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerAddDependency1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerAddDependency2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerAddDependency3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerAddDependency4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: IsCircular
%=============================================

\textbf{\textit{IsCircular}}\\
{\bf Purpose}\\
Test is a task object is part of a circular dependency\\
{\bf Expected outcome}\\
True if the task is part of a circular dependency, false otherwise\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for IsCircular} \label{tab:tc_dependencyManager_IsCircular} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerIsCircular1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerIsCircular2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerIsCircular3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerIsCircular4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerIsCircular5 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: RemoveDependency
%=============================================

\textbf{\textit{RemoveDependency}}\\
{\bf Purpose}\\
Remove a dependency\\
{\bf Expected outcome}\\
Dependency is removed correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for RemoveDependency} \label{tab:tc_dependencyManager_RemoveDependency} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerRemoveDependency1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerRemoveDependency2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerRemoveDependency3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerRemoveDependency4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: ResolveDependencies
%=============================================

\textbf{\textit{ResolveDependencies}}\\
{\bf Purpose}\\
Resolve dependencies\\
{\bf Expected outcome}\\
Dependencies are resolved correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for ResolveDependencies} \label{tab:tc_dependencyManager_ResolveDependencies} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveDependencies1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveDependencies2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveDependencies3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveDependencies4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveDependencies5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveDependencies6 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveDependencies7 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: ResolveOverlaps
%=============================================

\textbf{\textit{ResolveOverlaps}}\\
{\bf Purpose}\\
Resolve temporal overlaps\\
{\bf Expected outcome}\\
Overlaps are resolved correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for ResolveOverlaps} \label{tab:tc_dependencyManager_ResolveOverlaps} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveOverlaps1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveOverlaps2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveOverlaps3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveOverlaps4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveOverlaps5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerResolveOverlaps6 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\paragraph{TaskTree}
\noindent

%=============================================
% TEST CASE: AddSubTask
%=============================================

\textbf{\textit{AddSubTask}}\\
{\bf Purpose}\\
Add a subtask\\
{\bf Expected outcome}\\
Subtask is added correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for AddSubTask} \label{tab:tc_taskTree_AddSubTask} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeAddSubTask1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeAddSubTask2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeAddSubTask3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeAddSubTask4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: AddTask
%=============================================

\textbf{\textit{AddTask}}\\
{\bf Purpose}\\
Add a task\\
{\bf Expected outcome}\\
Task is added correctly, the TaskTree and taskmap contain the added task\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for AddTask} \label{tab:tc_taskTree_AddTask} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeAddTask1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeAddTask2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeAddTask3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetFlatTasklist
%=============================================

\textbf{\textit{GetFlatTasklist}}\\
{\bf Purpose}\\
Get a 'flat' list of all tasks and subtasks\\
{\bf Expected outcome}\\
Correct flat tasklist is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetFlatTasklist} \label{tab:tc_taskTree_GetFlatTasklist} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetFlatTasklist1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetFlatTasklist2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetFlatTasklist3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: LoadXmlFile
%=============================================

\textbf{\textit{LoadXmlFile}}\\
{\bf Purpose}\\
Load an XML tasktree file\\
{\bf Expected outcome}\\
TaskTree is loaded correctly, the TaskTree and taskmap contain all the loaded tasks\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for LoadXmlFile} \label{tab:tc_taskTree_LoadXmlFile} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile6 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile7 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile8 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile9 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile10 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile11 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeLoadXmlFile12 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: RemoveTask
%=============================================

\textbf{\textit{RemoveTask}}\\
{\bf Purpose}\\
Remove a task\\
{\bf Expected outcome}\\
Task is removed correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for RemoveTask} \label{tab:tc_taskTree_RemoveTask} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeRemoveTask1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeRemoveTask2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeRemoveTask3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeRemoveTask4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeRemoveTask5 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SaveCSVFile
%=============================================

\textbf{\textit{SaveCSVFile}}\\
{\bf Purpose}\\
Save the TaskTree to a CSV file\\
{\bf Expected outcome}\\
TaskTree is saved correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SaveCSVFile} \label{tab:tc_taskTree_SaveCSVFile} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveCSVFile1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveCSVFile2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveCSVFile3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveCSVFile4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveCSVFile5 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SaveXMLFile
%=============================================

\textbf{\textit{SaveXMLFile}}\\
{\bf Purpose}\\
Save the TaskTree to an XML file\\
{\bf Expected outcome}\\
TaskTree is saved correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SaveXMLFile} \label{tab:tc_taskTree_SaveXMLFile} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveXMLFile1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveXMLFile2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveXMLFile3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveXMLFile4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveXMLFile5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeSaveXMLFile6 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\paragraph{PeopleList}
\noindent

%=============================================
% TEST CASE: SaveCSVFile
%=============================================

\textbf{\textit{SaveCSVFile}}\\
{\bf Purpose}\\
Save the PeopleList to a CSV file\\
{\bf Expected outcome}\\
PeopleList is saved correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SaveCSVFile} \label{tab:tc_peopleList_SaveCSVFile} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListSaveCSVFile1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListSaveCSVFile2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListSaveCSVFile3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListSaveCSVFile4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListSaveCSVFile5 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\paragraph{Project}
\noindent

%=============================================
% TEST CASE: GetTasktree
%=============================================

\textbf{\textit{GetTasktree}}\\
{\bf Purpose}\\
Return the TaskTree singleton\\
{\bf Expected outcome}\\
TaskTree singleton is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetTasktree} \label{tab:tc_project_GetTasktree} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectGetTasktree1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectGetTasktree2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetPeopleList
%=============================================

\textbf{\textit{SetPeopleList}}\\
{\bf Purpose}\\
Set the PeopleList\\
{\bf Expected outcome}\\
PeopleList is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetPeopleList} \label{tab:tc_project_SetPeopleList} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectSetPeopleList1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectSetPeopleList2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}

%=============================================
% EVENT HANDLER SUBSYSTEM
%=============================================
%
\subsubsection{Event handler subsystem}
\noindent

The event handler subsystem will not be tested as the code for it is auto-generated by the IDE and assumed to work properly.

%=============================================
% USER INTERFACE SUBSYSTEM
%=============================================
%
\subsubsection{User interface subsystem}
\noindent

The user interface subsystem will not be tested as the code for it is auto-generated by the IDE and assumed to work properly.

%==================================================
% UNIT TEST CASES
%==================================================
\clearpage

\subsection{Unit Test cases}
%=============================================
% UNIT TEST CASES - CLASS TASK
%=============================================

\subsubsection{Test cases for the Task class}
\noindent

%=============================================
% TEST CASE: AddSubtask
%=============================================

\textbf{\textit{AddSubtask}}\\
{\bf Purpose}\\
Add a subtask\\
{\bf Expected outcome}\\
Subtask is added correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for AddSubtask} \label{tab:tc_task_AddSubtask} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask6 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask7 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask8 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask9 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask10 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask11 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask12 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask13 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskAddSubtask14 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: Constructor
%=============================================

\textbf{\textit{Constructor}}\\
{\bf Purpose}\\
Create an object instance\\
{\bf Expected outcome}\\
Object instance created with default values\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Constructor} \label{tab:tc_task_Constructor} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskConstructor & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: Equals
%=============================================
\clearpage

\textbf{\textit{Equals}}\\
{\bf Purpose}\\
Compare two Task objects for equality\\
{\bf Expected outcome}\\
True if the Task objects are equal, false otherwise\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Equals} \label{tab:tc_task_Equals} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskEquals1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskEquals2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskEquals3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskEquals4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskEquals5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskEquals6 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: RemoveSubtask
%=============================================

\textbf{\textit{RemoveSubtask}}\\
{\bf Purpose}\\
Remove a subtask\\
{\bf Expected outcome}\\
Subtask is removed correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for RemoveSubtask} \label{tab:tc_task_RemoveSubtask} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskRemoveSubtask1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskRemoveSubtask2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskRemoveSubtask3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskRemoveSubtask4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskRemoveSubtask5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskRemoveSubtask6 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskRemoveSubtask7 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetBeforeId
%=============================================

\textbf{\textit{SetBeforeId}}\\
{\bf Purpose}\\
Set the before ID\\
{\bf Expected outcome}\\
Before ID is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetBeforeId} \label{tab:tc_task_SetBeforeId} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetBeforeId1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetBeforeId2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetBeforeId3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetBeforeId4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetBeforeId5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetBeforeId6 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetDeadline
%=============================================

\textbf{\textit{SetDeadline}}\\
{\bf Purpose}\\
Set the deadline\\
{\bf Expected outcome}\\
Deadline is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetDeadline} \label{tab:tc_task_SetDeadline} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDeadline1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDeadline2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDeadline3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetDeliverable
%=============================================

\textbf{\textit{SetDeliverable}}\\
{\bf Purpose}\\
Set the deliverable\\
{\bf Expected outcome}\\
Deliverable is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetDeliverable} \label{tab:tc_task_SetDeliverable} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDeliverable1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDeliverable2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDeliverable3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDeliverable4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetDescription
%=============================================

\textbf{\textit{SetDescription}}\\
{\bf Purpose}\\
Set the description\\
{\bf Expected outcome}\\
Description is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetDescription} \label{tab:tc_task_SetDescription} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDescription1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDescription2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDescription3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDescription4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetDuration
%=============================================

\textbf{\textit{SetDuration}}\\
{\bf Purpose}\\
Set the duration\\
{\bf Expected outcome}\\
Duration is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetDuration} \label{tab:tc_task_SetDuration} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration6 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration7 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration8 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration9 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetDuration10 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetID
%=============================================
\clearpage

\textbf{\textit{SetID}}\\
{\bf Purpose}\\
Set the ID\\
{\bf Expected outcome}\\
ID is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetID} \label{tab:tc_task_SetID} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetId1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetId2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetId3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetParent
%=============================================

\textbf{\textit{SetParent}}\\
{\bf Purpose}\\
Set the parent\\
{\bf Expected outcome}\\
Parent is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetParent} \label{tab:tc_task_SetParent} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetParent1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetParent2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetParent3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetParent4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetParent5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetParent6 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetPerson
%=============================================

\textbf{\textit{SetPerson}}\\
{\bf Purpose}\\
Set the person\\
{\bf Expected outcome}\\
Person is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetPerson} \label{tab:tc_task_SetPerson} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson6 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson7 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson8 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson9 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson10 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson11 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetPerson12 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetTitle
%=============================================

\textbf{\textit{SetTitle}}\\
{\bf Purpose}\\
Set the title\\
{\bf Expected outcome}\\
Title is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetTitle} \label{tab:tc_task_SetTitle} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetTitle1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetTitle2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetTitle3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore task\textunderscore \arabic{test_case_counter} & testTaskSetTitle4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
%=============================================
% UNIT TEST CASES - CLASS PERSON
%=============================================

\subsubsection{Test cases for the Person class}
\noindent

%=============================================
% TEST CASE: AddTask
%=============================================

\textbf{\textit{AddTask}}\\
{\bf Purpose}\\
Add a task\\
{\bf Expected outcome}\\
Task is added correctly, tasklist contains the added task\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for AddTask} \label{tab:tc_person_AddTask} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonAddTask1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonAddTask2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonAddTask3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonAddTask4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonAddTask5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonAddTask6 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonAddTask7 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: Constructor
%=============================================

\textbf{\textit{Constructor}}\\
{\bf Purpose}\\
Create an object instance\\
{\bf Expected outcome}\\
Object instance created with default values\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Constructor} \label{tab:tc_person_Constructor} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonConstructor & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: Equals
%=============================================

\textbf{\textit{Equals}}\\
{\bf Purpose}\\
Compare two Person objects for equality\\
{\bf Expected outcome}\\
True if the Person objects are equal, false otherwise\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Equals} \label{tab:tc_person_Equals} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonEquals1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonEquals2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonEquals3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonEquals4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonEquals5 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonEquals6 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetTaskList
%=============================================

\textbf{\textit{GetTaskList}}\\
{\bf Purpose}\\
Return the tasklist (list of String objects)\\
{\bf Expected outcome}\\
Correct tasklist is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetTaskList} \label{tab:tc_person_GetTaskList} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonGetTaskList1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonGetTaskList2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonGetTaskList3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetTasks
%=============================================

\textbf{\textit{GetTasks}}\\
{\bf Purpose}\\
Return the tasks (list of Task objects)\\
{\bf Expected outcome}\\
Correct tasks are returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetTasks} \label{tab:tc_person_GetTasks} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonGetTasks1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonGetTasks2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonGetTasks3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: SetName
%=============================================

\textbf{\textit{SetName}}\\
{\bf Purpose}\\
Set the name\\
{\bf Expected outcome}\\
Name is set correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for SetName} \label{tab:tc_person_SetName} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonSetName1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonSetName2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonSetName3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonSetName4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: ToString
%=============================================

\textbf{\textit{ToString}}\\
{\bf Purpose}\\
Return the string representation\\
{\bf Expected outcome}\\
Correct string representation is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for ToString} \label{tab:tc_person_ToString} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonToString1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore person\textunderscore \arabic{test_case_counter} & testPersonToString2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
%=============================================
% UNIT TEST CASES - CLASS DEPENDENCYMANAGER
%=============================================

\subsubsection{Test cases for the DependencyManager class}
\noindent

%=============================================
% TEST CASE: Clear
%=============================================

\textbf{\textit{Clear}}\\
{\bf Purpose}\\
Clear the DependencyManager\\
{\bf Expected outcome}\\
DependencyManager is cleared correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Clear} \label{tab:tc_dependencyManager_Clear} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerClear1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerClear2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetInstance
%=============================================

\textbf{\textit{GetInstance}}\\
{\bf Purpose}\\
Return the DependencyManager singleton\\
{\bf Expected outcome}\\
DependencyManager singleton is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetInstance} \label{tab:tc_dependencyManager_GetInstance} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerGetInstance1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore dependencyManager\textunderscore \arabic{test_case_counter} & testDependencyManagerGetInstance2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
%=============================================
% UNIT TEST CASES - CLASS TASKTREE
%=============================================

\subsubsection{Test cases for the TaskTree class}
\noindent

%=============================================
% TEST CASE: Clear
%=============================================

\textbf{\textit{Clear}}\\
{\bf Purpose}\\
Clear the TaskTree\\
{\bf Expected outcome}\\
TaskTree is cleared correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Clear} \label{tab:tc_taskTree_Clear} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeClear1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeClear2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetInstance
%=============================================

\textbf{\textit{GetInstance}}\\
{\bf Purpose}\\
Return the TaskTree singleton\\
{\bf Expected outcome}\\
TaskTree singleton is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetInstance} \label{tab:tc_taskTree_GetInstance} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetInstance1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetInstance2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetTask
%=============================================

\textbf{\textit{GetTask}}\\
{\bf Purpose}\\
Return the task\\
{\bf Expected outcome}\\
Correct task is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetTask} \label{tab:tc_taskTree_GetTask} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTask1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTask2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTask3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTask4 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTask5 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetTaskList
%=============================================

\textbf{\textit{GetTaskList}}\\
{\bf Purpose}\\
Return the tasklist\\
{\bf Expected outcome}\\
Correct tasklist is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetTaskList} \label{tab:tc_taskTree_GetTaskList} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTaskList1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTaskList2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTaskList3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetTopLevelTasklist
%=============================================

\textbf{\textit{GetTopLevelTasklist}}\\
{\bf Purpose}\\
Get a list of all tasks\\
{\bf Expected outcome}\\
Correct toplevel tasklist is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetTopLevelTasklist} \label{tab:tc_taskTree_GetTopLevelTasklist} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTopLevelTasklist1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTopLevelTasklist2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore taskTree\textunderscore \arabic{test_case_counter} & testTaskTreeGetTopLevelTasklist3 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
%=============================================
% UNIT TEST CASES - CLASS PEOPLELIST
%=============================================

\subsubsection{Test cases for the PeopleList class}
\noindent

%=============================================
% TEST CASE: AddPerson
%=============================================

\textbf{\textit{AddPerson}}\\
{\bf Purpose}\\
Add a person\\
{\bf Expected outcome}\\
Person is added correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for AddPerson} \label{tab:tc_peopleList_AddPerson} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListAddPerson1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListAddPerson2 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListAddPerson3 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListAddPerson4 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: Clear
%=============================================

\textbf{\textit{Clear}}\\
{\bf Purpose}\\
Clear the PeopleList\\
{\bf Expected outcome}\\
PeopleList is cleared correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Clear} \label{tab:tc_peopleList_Clear} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListClear1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListClear2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetInstance
%=============================================

\textbf{\textit{GetInstance}}\\
{\bf Purpose}\\
Return the PeopleList singleton\\
{\bf Expected outcome}\\
PeopleList singleton is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetInstance} \label{tab:tc_peopleList_GetInstance} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListGetInstance1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore peopleList\textunderscore \arabic{test_case_counter} & testPeopleListGetInstance2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
%=============================================
% UNIT TEST CASES - CLASS PROJECT
%=============================================

\subsubsection{Test cases for the Project class}
\noindent

%=============================================
% TEST CASE: Clear
%=============================================

\textbf{\textit{Clear}}\\
{\bf Purpose}\\
Clear the Project\\
{\bf Expected outcome}\\
Project is cleared correctly\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for Clear} \label{tab:tc_project_Clear} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectClear1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectClear2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}
\noindent

%=============================================
% TEST CASE: GetInstance
%=============================================

\textbf{\textit{GetInstance}}\\
{\bf Purpose}\\
Return the Project singleton\\
{\bf Expected outcome}\\
Project singleton is returned\\
\begin{longtable}{| l | l | l | } 
\caption{List of test cases for GetInstance} \label{tab:tc_project_GetInstance} \\
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\hline
\endfirsthead
\hline
\textbf{ID} & \textbf{Test method} & \textbf{Status}\\
\endhead
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectGetInstance1 & pass \stepcounter{test_case_counter}\\
\hline
tc\textunderscore project\textunderscore \arabic{test_case_counter} & testProjectGetInstance2 & pass \stepcounter{test_case_counter}\\
\hline
\end{longtable}

%==================================================
% TEST RESULTS
%==================================================
\clearpage

\section{Test Results}

\subsection{System Level Test cases}
\begin{table*}[htb]
	\centering
		\begin{tabular}{| l | c |}
\hline
\textbf{Requirement} & \textbf{Pass percentage}\\
\hline
F1: Loading Project Data & 100 \\
\hline
F2: Viewing Task Information & NA \\
\hline
F3: Adding Task & 100 \\
\hline
F4: Deleting Task & 100 \\
\hline
F5: Modifying Task & 100 \\
\hline
F6: Exporting Tasks & 100 \\
\hline
F7: Exporting People & 100 \\
\hline
F8: Saving Project Data & 100 \\
\hline
		\end{tabular}
	\caption{Requirement test coverage}
	\label{tab:RequirementTestCoverage}
\end{table*}

Requirement F2 Viewing Task Information is not tested as it relies on auto-generated code and is assumed to work properly.

\subsection{Automated Unit Test Cases}

The unit test are run automatically. Out of 210 unit tests, initially 194 passed, 16 failed.

The following tests failed when passing null or an empty string as the parameter:

\begin{itemize}
	\item tc\textunderscore task\textunderscore 115: TaskSetDescription1
	\item tc\textunderscore task\textunderscore 117: TaskSetDescription3
	\item tc\textunderscore task\textunderscore 111: TaskSetDeliverable1
	\item tc\textunderscore task\textunderscore 113: TaskSetDeliverable3
	\item tc\textunderscore task\textunderscore 138: TaskSetPerson1
	\item tc\textunderscore task\textunderscore 140: TaskSetPerson3
	\item tc\textunderscore task\textunderscore 150: TaskSetTitle1
	\item tc\textunderscore task\textunderscore 152: TaskSetTitle3
	\item tc\textunderscore peopleList\textunderscore 65: PeopleListSaveCSVFile1
	\item tc\textunderscore peopleList\textunderscore 66: PeopleListSaveCSVFile2
	\item tc\textunderscore taskTree\textunderscore 54: TaskTreeSaveCSVFile1
	\item tc\textunderscore taskTree\textunderscore 55: TaskTreeSaveCSVFile2
	\item tc\textunderscore taskTree\textunderscore 59: TaskTreeSaveXMLFile1
	\item tc\textunderscore taskTree\textunderscore 60: TaskTreeSaveXMLFile2
\end{itemize}

Checks for null and empty strings were added to make these tests pass.

The following tests failed:

\begin{itemize}
	\item tc\textunderscore taskTree\textunderscore 47: testTaskTreeLoadXmlFile11
	\item tc\textunderscore taskTree\textunderscore 48: testTaskTreeLoadXmlFile12
\end{itemize}

Test case tc\textunderscore taskTree\textunderscore 47 failed because an accidentally mislabelled subtask (labelled task rather than subtask) should result in an invalid file format error message. The cause for this error is the way the nodes are selected during the file open operation. This issues has been fixed by validating the input file against an XSD.

Test case tc\textunderscore taskTree\textunderscore 48 failed when a subtask had a beforeId different from -1 in the input file. This issue has been fixed by checking for invalid beforeIDs during file import.

Currently, 210 test cases out of 210 pass.

\clearpage
%
%\section{References}

\appendix

%==================================================
% DESCRIPTION OF INPUT FILES
%==================================================
%
\section{Description of Input Files}

%==================================================
% Empty project file
%==================================================
%
\subsection{Empty project file}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{empty.xml}

%==================================================
% Non-empty project file 1
%==================================================
%
\subsection{Non-empty project file 1}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{input1.xml}

%==================================================
% Non-empty project file 2
%==================================================
%
\subsection{Non-empty project file 2}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{input2.xml}

%==================================================
% INVALID PROJECT FILE
%==================================================
%
\subsection{Invalid project file}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{invalid.xml}

%==================================================
% DESCRIPTION OF OUTPUT FILES
%==================================================
%
\section{Description of Output Files}

%==================================================
% Empty tasks export file
%==================================================
%
\subsection{Empty tasks export CSV file}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{empty_tasks_export.csv}

%==================================================
% Tasks export file 1
%==================================================
%
\subsection{Non-empty tasks export CSV file 1}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{tasks_export1.csv}

%==================================================
% Empty people export file
%==================================================
%
\subsection{Empty people export CSV file}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{empty_people_export.csv}

%==================================================
% People export file 1
%==================================================
%
\subsection{Non-empty people export CSV file 1}

\VerbatimInput[baselinestretch=1,fontsize=\footnotesize,numbers=left]{people_export1.csv}

\end{document}
